import abc


class Converter(object, metaclass=abc.ABCMeta):
    def __init__(self, input_url, output_url, input_format=None, output_format=None, **kwargs):
        self.input_url = input_url
        self.output_url = output_url
        self.input_format = input_format
        self.output_format = output_format
        self.kwargs = kwargs

        self._validate()

    def _validate(self):
        if not self.input_url or not self.output_url:
            raise ValueError('input_url and output_url required')

    @abc.abstractmethod
    def convert(self):
        ...

    def get_input_format(self):
        if self.input_format:
            return self.input_format

        return self.input_url.split('.')[-1]

    def get_output_format(self):
        if self.output_format:
            return self.output_format

        return self.output_url.split('.')[-1]
